Skip to content

Per-target author overrides and endpoint URL files - #441

Merged
renmengye merged 2 commits into
mainfrom
feat/author-overrides
Sep 29, 2026
Merged

renmengye merged 2 commits into
mainfrom
feat/author-overrides

Conversation

@renmengye

Copy link
Copy Markdown
Member

Today the author backend and model are fleet-wide (OUTERLOOP_AUTHOR_BACKEND / _MODEL / _ENDPOINT), so a deployment cannot trial a different author, such as a self-hosted model, on one target beside its usual authors. And a self-hosted server whose address changes on each restart cannot be used, because endpoint profiles take a fixed URL.

What changes

  • OUTERLOOP_AUTHOR_OVERRIDES (optional deployment setting): JSON mapping a target to an author override, optionally narrowed to agent slots. Parsed and validated once at startup; a mistake is one clear error naming the setting.
    OUTERLOOP_AUTHOR_OVERRIDES='{"owner/repo":{"backend":"claude","model":"served-model[endpoint=onprem]","slots":["agent-05"]}}'
    
  • The override binds to a run when it is claimed (direct climbs: at startup) and holds across wakes and resumes, even if the setting changes.
  • Judges do not follow it. Panels and reviewers resolve against the fleet author exactly as without an override, so credit stays independent of the trialled model. Author/judge key separation uses the override's effective credential.
  • OUTERLOOP_ENDPOINT_<NAME>_URL_FILE (alternative to _URL): a file holding a bare URL or JSON with a url key, read at each session start and wake. Before a session on such an endpoint, one bounded health request (the key in a header) checks the server answers. A missing file or a dead address defers the run: fresh runs park instead of aborting, and wakes refund the retry.
  • init provisions every backend the fleet author and any override select before validating them.
  • Run status and the board show each run's author backend and model, and whether it is overridden.
  • claude, codex and hermes authors are peers here.

Compatibility (RELEASING.md)

Run records add optional author_overridden (default false); backend, model, endpoint selector and credential path reuse existing fields. Status JSON adds author backend/model and override information. All records previously accepted by load_record, including records without author fields and ended records, remain readable without migration (legacy fixture exercised on first read, repeated save/read and interrupted-write retry). On the first tick, existing runs and PRs keep their established author routes and resume/panel behaviour.

Fresh endpoint deferrals reuse author-sleep capacity parks without a session id; deferred wakes keep their state and refund the current delivery's retry. Rollback stays readable but loses fleet-only panel inheritance for overridden runs, and older kernels cannot resume fresh endpoint capacity parks: finish overridden runs and let endpoint parks resume before rolling back. Upgrading: line in CHANGELOG.

Tests

Parsing valid and invalid; slot matching; override at start, resume and wake; binding survives a setting change; an overridden run's panel equals a non-overridden run's; key separation with the override's credential; URL_FILE bare and JSON, re-read on wake; missing file and dead address defer without consuming a retry (fresh run and wake); fresh init with codex and hermes overrides; unchanged behaviour with no setting. Mutation-checked: panel independence and binding. Gate: 2495 passed, 2 skipped; ruff, format, mypy clean.

Built by codex from my brief; codex self-review (2 findings) plus my cross-review (2 findings), all fixed before this PR.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 1 — reviewed head 41ba327f — reviewer summarizer:hermes/gpt-5.6-terra over coverage+credentials+deployment+general+lifecycle+prose.

terra
Advisory findings from outerloop — the code owner decides. Reply to disagree; the outerloop:no-review label opts this PR out.

Verdict: 1 blocking, 0 advisory.

1 finding attached to the lines below.

Merged one blocking endpoint-validation finding supported by coverage, deployment, and prose. Rejected: none; the prose entry is duplicative rather than a rewrite, so it was merged as corroborating evidence instead of recorded separately as a suggestion.

Comment thread src/outerloop/endpoints.py
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 1 — reviewed head b06bfd55 — reviewer hermes/gpt-5.6-terra.

terra
Advisory findings from outerloop — the code owner decides. Reply to disagree; the outerloop:no-review label opts this PR out.

Verdict: no defects found.

@renmengye
renmengye merged commit 4bf57e0 into main Sep 29, 2026
5 checks passed
@renmengye
renmengye deleted the feat/author-overrides branch September 29, 2026 02:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant